// noinspection JSUnresolvedReference /** * Field Google Map */ /* global jQuery, document, redux_change, redux, google */ (function ( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.google_maps = redux.field_objects.google_maps || {}; /* LIBRARY INIT */ redux.field_objects.google_maps.init = function ( selector ) { if ( ! selector ) { selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' ); } $( selector ).each( function ( i ) { let delayRender; const el = $( this ); let parent = el; if ( ! el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ':hidden' ) ) { return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // Check for delay render, which is useful for calling a map // render after JavaScript load. delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) ); // API Key button. redux.field_objects.google_maps.clickHandler( el ); // Init our maps. redux.field_objects.google_maps.initMap( el, i, delayRender ); } ); }; /* INIT MAP FUNCTION */ redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) { let delayed; let scrollWheel; let streetView; let mapType; let address; let defLat; let defLong; let defaultZoom; let mapOptions; let geocoder; let g_autoComplete; let g_LatLng; let g_map; let noLatLng = false; // Pull the map class. const mapClass = el.find( '.redux_framework_google_maps' ); const containerID = mapClass.attr( 'id' ); const autocomplete = containerID + '_autocomplete'; const canvas = containerID + '_map_canvas'; const canvasId = $( '#' + canvas ); const latitude = containerID + '_latitude'; const longitude = containerID + '_longitude'; // Add map index to data attr. // Why, say we want to use delay_render, // and want to init the map later on. // You'd need the index number in the // event of multiple map instances. // This allows one to retrieve it // later. $( mapClass ).attr( 'data-idx', idx ); if ( true === delayRender ) { return; } // Map has been rendered, no need to process again. if ( $( '#' + containerID ).hasClass( 'rendered' ) ) { return; } // If a map is set to delay render and has been initiated // from another scrip, add the 'render' class so rendering // does not occur. // It messes things up. delayed = Boolean( mapClass.data( 'delay-render' ) ); if ( true === delayed ) { mapClass.addClass( 'rendered' ); } // Create the autocomplete object, restricting the search // to geographical location types. g_autoComplete = await google.maps.importLibrary( 'places' ); g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} ); // Data bindings. scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) ); streetView = Boolean( mapClass.data( 'street-view' ) ); mapType = Boolean( mapClass.data( 'map-type' ) ); address = mapClass.data( 'address' ); address = decodeURIComponent( address ); address = address.trim(); // Set default Lat/lng. defLat = canvasId.data( 'default-lat' ); defLong = canvasId.data( 'default-long' ); defaultZoom = canvasId.data( 'default-zoom' ); // Eval whether to set maps based on lat/lng or address. if ( '' !== address ) { if ( '' === defLat || '' === defLong ) { noLatLng = true; } } else { noLatLng = false; } // Can't have empty values, or the map API will complain. // Set default for the middle of the United States. defLat = defLat ? defLat : 39.11676722061108; defLong = defLong ? defLong : -100.47761000000003; if ( noLatLng ) { // If displaying a map based on an address. geocoder = new google.maps.Geocoder(); // Set up Geocode and pass address. geocoder.geocode( {'address': address}, function ( results, status ) { let latitude; let longitude; // Function results. if ( status === google.maps.GeocoderStatus.OK ) { // A good address was passed. g_LatLng = results[0].geometry.location; // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); // Get and set lat/long data. latitude = el.find( '#' + containerID + '_latitude' ); latitude.val( results[0].geometry.location.lat() ); longitude = el.find( '#' + containerID + '_longitude' ); longitude.val( results[0].geometry.location.lng() ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } else { // No data found, alert the user. alert( 'Geocode was not successful for the following reason: ' + status ); } } ); } else { // If displaying map based on an lat/lng. g_LatLng = new google.maps.LatLng( defLat, defLong ); // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, // Start off far unless an item is selected, set by php. streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create the map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } }; redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) { let markerTooltip; let infoWindow; let g_marker; let geoAlert = mapClass.data( 'geo-alert' ); // Get HTML. const input = document.getElementById( autocomplete ); // Set objects into the map. g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input ); // Bind objects to the map. g_autoComplete = new google.maps.places.Autocomplete( input ); g_autoComplete.bindTo( 'bounds', g_map ); // Get the marker tooltip data. markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Create infoWindow. infoWindow = new google.maps.InfoWindow(); // Create marker. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), draggable: true, title: markerTooltip, animation: google.maps.Animation.DROP } ); geoAlert = decodeURIComponent( geoAlert ); // Place change. google.maps.event.addListener( g_autoComplete, 'place_changed', function () { let place; let address; let markerTooltip; infoWindow.close(); // Get place data. place = g_autoComplete.getPlace(); // Display alert if something went wrong. if ( ! place.geometry ) { window.alert( geoAlert ); return; } console.log( place.geometry.viewport ); // If the place has a geometry, then present it on a map. if ( place.geometry.viewport ) { g_map.fitBounds( place.geometry.viewport ); } else { g_map.setCenter( place.geometry.location ); g_map.setZoom( 17 ); // Why 17? Because it looks good. } markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Set the marker icon. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), title: markerTooltip, clickable: true, draggable: true, animation: google.maps.Animation.DROP } ); // Set marker position and display. g_marker.setPosition( place.geometry.location ); g_marker.setVisible( true ); // Form array of address components. address = ''; if ( place.address_components ) { address = [( place.address_components[0] && place.address_components[0].short_name || '' ), ( place.address_components[1] && place.address_components[1].short_name || '' ), ( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' ); } // Set the default marker info window with address data. infoWindow.setContent( '
' + place.name + '
' + address ); infoWindow.open( g_map, g_marker ); // Run Geolocation. redux.field_objects.google_maps.geoLocate( g_autoComplete ); // Fill in address inputs. redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete ); } ); // Marker drag. google.maps.event.addListener( g_marker, 'drag', function ( event ) { document.getElementById( latitude ).value = event.latLng.lat(); document.getElementById( longitude ).value = event.latLng.lng(); } ); // End marker drag. google.maps.event.addListener( g_marker, 'dragend', function () { redux_change( el.find( '.redux_framework_google_maps' ) ); } ); // Zoom Changed. g_map.addListener( 'zoom_changed', function () { el.find( '.google_m_zoom_input' ).val( g_map.getZoom() ); } ); // Marker Info Window. infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener( g_marker, 'click', function () { const marker_info = containerID + '_marker_info'; const infoValue = document.getElementById( marker_info ).value; if ( '' !== infoValue ) { infoWindow.setContent( infoValue ); infoWindow.open( g_map, g_marker ); } } ); }; /* FILL IN ADDRESS FUNCTION */ redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) { // Set variables. const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' ); // What if someone only wants city, or state, ect... // gotta do it this way to check for the address! // Need to check each of the returned components to see what is returned. const componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; // Get the place details from the autocomplete object. const place = g_autoComplete.getPlace(); let component; let i; let addressType; let _d_addressType; let val; let len; document.getElementById( latitude ).value = place.geometry.location.lat(); document.getElementById( longitude ).value = place.geometry.location.lng(); for ( component in componentForm ) { if ( componentForm.hasOwnProperty( component ) ) { // Push in the dynamic form element ID again. component = containerID + '_' + component; // Assign to proper place. document.getElementById( component ).value = ''; document.getElementById( component ).disabled = false; } } // Get each component of the address from the place details // and fill the corresponding field on the form. len = place.address_components.length; for ( i = 0; i < len; i += 1 ) { addressType = place.address_components[i].types[0]; if ( componentForm[addressType] ) { // Push in the dynamic form element ID again. _d_addressType = containerID + '_' + addressType; // Get the original. val = place.address_components[i][componentForm[addressType]]; // Assign to proper place. document.getElementById( _d_addressType ).value = val; } } }; redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) { if ( navigator.geolocation ) { navigator.geolocation.getCurrentPosition( function ( position ) { const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude ); const circle = new google.maps.Circle( { center: geolocation, radius: position.coords.accuracy } ); g_autoComplete.setBounds( circle.getBounds() ); } ); } }; /* API BUTTON CLICK HANDLER */ redux.field_objects.google_maps.clickHandler = function ( el ) { // Find the API Key button and react on click. el.find( '.google_m_api_key_button' ).on( 'click', function () { // Find message wrapper. const wrapper = el.find( '.google_m_api_key_wrapper' ); if ( wrapper.is( ':visible' ) ) { // If the wrapper is visible, close it. wrapper.slideUp( 'fast', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } else { // If the wrapper is visible, open it. wrapper.slideDown( 'medium', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } } ); el.find( '.google_m_autocomplete' ).on( 'keypress', function ( e ) { if ( 13 === e.keyCode ) { e.preventDefault(); } } ); // Auto select autocomplete contents, // since Google doesn't do this inherently. el.find( '.google_m_autocomplete' ).on( 'click', function ( e ) { $( this ).trigger( 'focus' ); $( this ).trigger( 'select' ); e.preventDefault(); } ); }; } )( jQuery ); 20Bet στην Ελλάδα γκάμα παιχνιδιών για κάθε γούστο – Orchid Group
Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

20Bet στην Ελλάδα γκάμα παιχνιδιών για κάθε γούστο

Ανακαλύψτε τον κόσμο του 20Bet και απολαύστε μια μοναδική εμπειρία στο 20bet casino! Με το 20bet app, μπορείτε να συνδεθείτε εύκολα μέσω του 20bet login και να απολαύσετε μια ευρεία γκάμα παιχνιδιών.

Στο 20bet greece, θα βρείτε όλα όσα χρειάζεστε για να κάνετε το 20bet bet ακόμα πιο συναρπαστικό. Είτε προτιμάτε το 20 bet casino είτε άλλα παιχνίδια, το 20βετ σας προσφέρει απίθανες ευκαιρίες για διασκέδαση και κέρδη!

Μην χάσετε την ευκαιρία να ζήσετε τη μαγεία του bet 20 και να αποκτήσετε πρόσβαση στα καλύτερα παιχνίδια με λίγα απλά βήματα!

Ανακαλύψτε την ποικιλία των παιχνιδιών

Στο 20bet casino, θα βρείτε μια ευρεία γκάμα παιχνιδιών που καλύπτει κάθε γούστο. Από κλασικά παιχνίδια καζίνο μέχρι καινοτόμες επιλογές, το 20bet greece προσφέρει μια μοναδική εμπειρία.

Κατηγορία
Παιχνίδια

Σλοτ Κλασικά, βίντεο, jackpot Ζωντανά Καζίνο Μπλακτζακ, ρουλέτα, παιχνίδια με παρουσιαστή Αθλητικά Στοιχήματα Ποδόσφαιρο, μπάσκετ, τένις

Με το 20bet app, μπορείτε να απολαύσετε όλα αυτά τα παιχνίδια από οπουδήποτε. Είτε χρησιμοποιείτε το 20bet login στην ιστοσελίδα 20bet.gr είτε στο bet 20 app, η ποικιλία είναι πάντα στα χέρια σας.

Το 20βετ είναι η καλύτερη επιλογή για όσους αναζητούν ποικιλία και ποιότητα. Εξερευνήστε το 20 bet casino και ανακαλύψτε νέες ευκαιρίες για διασκέδαση και κέρδη!

Ασφάλεια και αξιοπιστία στην 20Bet

Η 20bet.gr διασφαλίζει την απόλυτη προστασία των δεδομένων και των συναλλαγών σας. Με χρήση προηγμένων τεχνολογιών κρυπτογράφησης, η 20bet εξασφαλίζει ότι κάθε πληροφορία παραμένει εμπιστευτική.

Η 20bet bet λειτουργεί με άδεια από αναγνωρισμένες αρχές, προσφέροντας ένα ασφαλές περιβάλλον για όλους τους χρήστες. Η bet 20 είναι γνωστή για τη διαφάνεια και την ευθύνη της, κάνοντας την 20βετ μια αξιόπιστη επιλογή.

Στο 20 bet casino, μπορείτε να απολαύσετε παιχνίδια υψηλής ποιότητας από κορυφαίους παρόχους. Η 20bet app προσφέρει την ίδια ασφάλεια και ευκολία, επιτρέποντάς σας να παίζετε από οπουδήποτε στην Ελλάδα.

Η 20bet greece είναι αφοσιωμένη στην παροχή μιας ασφαλούς και διασκεδαστικής εμπειρίας, κάνοντας την 20bet casino την πρώτη επιλογή για τους λάτρεις των παιχνιδιών.

Ευέλικτες επιλογές πληρωμών

Στο 20Bet Casino, η εμπειρία σας γίνεται ακόμα πιο απλή με τις ποικίλες μεθόδους πληρωμής που προσφέρουμε. Είτε χρησιμοποιείτε την 20Bet app είτε επισκέπτεστε το 20bet.gr, μπορείτε να επιλέξετε από κάρτες, e-wallets και άλλες σύγχρονες λύσεις.

Με το 20bet login, έχετε άμεση πρόσβαση σε όλες τις επιλογές σας, ενώ οι συναλλαγές είναι γρήγορες και ασφαλείς. Το 20bet greece εξασφαλίζει ότι κάθε πληρωμή σας γίνεται με ευκολία και αξιοπιστία.

Αν θέλετε να κάνετε μια 20bet bet ή να απολαύσετε τα παιχνίδια στο 20 bet casino, οι ευέλικτες επιλογές πληρωμών μας καλύπτουν κάθε ανάγκη σας. Επιλέξτε το bet 20 για μια ολοκληρωμένη εμπειρία τζόγου!

Εξατομικευμένες προσφορές και μπόνους

Στο 20Bet Casino, κάθε παίκτης απολαμβάνει εξατομικευμένες προσφορές που ταιριάζουν στις προτιμήσεις του. Με την εγγραφή σας μέσω του 20Bet Login, έχετε πρόσβαση σε αποκλειστικά μπόνους που ενισχύουν την εμπειρία σας.

Αν είστε νέος χρήστης στο 20Bet Greece, μπορείτε να επωφεληθείτε από ειδικές προσφορές πρώτης κατάθεσης. Επιπλέον, οι τακτικοί παίκτες του 20Bet.gr λαμβάνουν συνεχώς προσωποποιημένες ενισχύσεις και δωρεάν περιστροφές.

Με το 20Bet App, έχετε πάντα στη διάθεσή σας τις καλύτερες προσφορές. Ανεξάρτητα από το αν προτιμάτε το Bet 20 για live παιχνίδια ή κλασικά καζίνο, το 20Βετ σας προσφέρει ανταμοιβές που ανταποκρίνονται στον τρόπο παιχνιδιού σας.

Υποστήριξη πελατών 24/7

Στο 20Bet, η εμπειρία σας είναι η προτεραιότητά μας. Για αυτό, προσφέρουμε υποστήριξη πελατών 24 ώρες το 24ωρο, 7 ημέρες την εβδομάδα. Είτε χρησιμοποιείτε την 20bet app είτε την ιστοσελίδα 20bet.gr, η ομάδα μας είναι πάντα διαθέσιμη για να σας βοηθήσει.

  • Ζωντανή συνομιλία: Αποκτήστε άμεση βοήθεια μέσω της ζωντανής συνομιλίας στο 20bet casino.
  • Ηλεκτρονικό ταχυδρομείο: Στείλτε μας μήνυμα στο support@20bet.gr για οποιαδήποτε ερώτηση.
  • Συχνές ερωτήσεις: Βρείτε απαντήσεις σε κοινές ερωτήσεις στην ενότητα FAQ του 20bet greece.

Επιπλέον, στο 20 bet, μπορείτε να επικοινωνήσετε μαζί μας μέσω της εφαρμογής 20bet app ή της ιστοσελίδας 20βετ. Η ομάδα μας είναι εκπαιδευμένη να αντιμετωπίζει κάθε πρόβλημα γρήγορα και αποτελεσματικά.

  • Εγγραφή και λογαριασμός: Βοήθεια με την εγγραφή και τη διαχείριση του λογαριασμού σας στο 20bet bet.
  • Συναλλαγές: Επιλύστε ερωτήσεις σχετικά με καταθέσεις και αναλήψεις στο bet 20.
  • Τεχνικά ζητήματα: Λύσεις για οποιαδήποτε τεχνική δυσκολία στο 20 bet casino.
  • Στο 20Bet, είμαστε εδώ για εσάς κάθε στιγμή. Η ικανοποίησή σας είναι η κορυφαία μας επιδίωξη!

    Απλή και γρήγορη εγγραφή

    Η διαδικασία εγγραφής στην 20bet Greece είναι εύκολη και γρήγορη, ώστε να μπορείτε να απολαύσετε τα παιχνίδια χωρίς καθυστερήσεις. Ακολουθήστε τα παρακάτω βήματα:

    • Επισκεφτείτε τον ιστότοπο 20bet.gr ή κατεβάστε την 20bet app.
    • Κάντε κλικ στο κουμπί “Εγγραφή” και συμπληρώστε τα απαραίτητα στοιχεία.
    • Επιβεβαιώστε τον λογαριασμό σας μέσω email ή SMS.
    • Κάντε 20bet login και ξεκινήστε να παίζετε στο 20bet casino.

    Με την 20bet bet, έχετε πρόσβαση σε μια ποικιλία παιχνιδιών και στοιχημάτων. Η εγγραφή σας στο 20 bet casino είναι η πύλη για ατελείωτη ψυχαγωγία και ευκαιρίες κέρδους!

    Design and Develop by Ovatheme